package handlers

import (
    "encoding/json"
    "net/http"
    "shopping-backend/models"
    "strconv"
    "github.com/gorilla/mux"
)

// 获取支付信息
    // @Summary 获取支付信息
    // @Description 根据订单ID获取对应的支付信息。
    // @Tags 支付
    // @Accept json
    // @Produce json
    // @Param order_id path int true "订单ID"
    // @Success 200 {object} models.Payment "支付信息"
    // @Failure 400 {string} string "无效的订单ID"
    // @Failure 404 {string} string "付款未找到"
    // @Failure 500 {string} string "服务器内部错误"
    // @Router /payments/{order_id} [get]
func GetPayment(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    orderID, err := strconv.Atoi(vars["order_id"])
    if err != nil {
        http.Error(w, "无效的订单ID", http.StatusBadRequest)
        return
    }

    // 获取支付信息
    payment, err := models.GetPaymentByOrderID(orderID)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    if (payment == models.Payment{}) { // 如果没有找到支付信息
        http.Error(w, "付款未找到", http.StatusNotFound)
        return
    }

    // 返回支付信息
    json.NewEncoder(w).Encode(payment)
}

// 创建支付信息
    // @Summary 创建支付信息
    // @Description 根据请求体中的数据创建新的支付信息。
    // @Tags 支付
    // @Accept json
    // @Produce json
    // @Param payment body models.Payment true "支付信息"
    // @Success 201 {object} models.Payment "返回创建的支付信息"
    // @Failure 400 {string} string "无效的请求数据或缺少必填字段"
    // @Failure 500 {string} string "保存支付信息时出错"
    // @Router /payments [post]
func CreatePayment(w http.ResponseWriter, r *http.Request) {
    var payment models.Payment
    
    // 解析请求体中的 JSON 数据
    err := json.NewDecoder(r.Body).Decode(&payment)
    if err != nil {
        http.Error(w, "无效的请求数据", http.StatusBadRequest)
        return
    }

    // 检查必填字段是否为空
    if payment.OrderID == 0 || payment.PaymentMethod == "" || payment.Amount <= 0 {
        http.Error(w, "缺少必填字段", http.StatusBadRequest)
        return
    }

    // 调用模型层函数插入支付信息
    paymentID, err := models.AddPayment(payment)
    if err != nil {
        http.Error(w, "保存支付信息时出错: "+err.Error(), http.StatusInternalServerError)
        return
    }

    // 返回创建成功的支付信息
    payment.ID = int(paymentID) // 将数据库返回的ID赋值给结构体
    w.Header().Set("Content-Type", "application/json")
    w.WriteHeader(http.StatusCreated)
    json.NewEncoder(w).Encode(payment)
}